home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 1 / Precision Software Applications Silver Collection Volume One (PSM) (1993).iso / windows / games / wincapt.arj / DIALOGS.C < prev    next >
C/C++ Source or Header  |  1992-04-10  |  10KB  |  304 lines

  1. //***********************************************************************
  2. //
  3. // dialogs.c
  4. //
  5. // Contains all the dialog procedures for WinCap Windows Screen Capture
  6. // Program.
  7. //
  8. // Dialog Functions:
  9. //
  10. // AboutDlgProc()         // About Box
  11. // PrintDlgProc()         // Print Options Dialog
  12. // SavingDlgProc()        // Dialog which displays "Saving to file..."
  13. //
  14. // Development Team: Mark Bader
  15. //                   Patrick Schreiber
  16. //                   Garrett McAuliffe
  17. //                   Eric Flo
  18. //                   Tony Claflin
  19. //                   Dan Ruder
  20. //
  21. // Written by Microsoft Product Support Services, Developer Support.
  22. // Copyright (c) 1991 Microsoft Corporation. All rights reserved.
  23. //***********************************************************************
  24.  
  25. #include <windows.h>
  26. #include <string.h>
  27. #include <stdlib.h>
  28. #include "WINCAP.h"
  29. #include "DIALOGS.h"
  30. #include "commdlg.h"
  31.  
  32. /* Global variables which are set in main program */
  33. extern char szAppName[20];  /* Name of app */
  34. extern HWND ghInst;         /* Handle to instance */
  35. extern HWND ghWndMain;      /* Handle to main window */
  36.  
  37. //**********************************************************************
  38. //
  39. //"About" Dialog Box Window Procedure
  40. //
  41. // Notable features:  This dialog box draws the application's icon
  42. // in the dialog box itself. The icon is actually stretched larger to
  43. // fit in the specified area, which must be done manually.
  44. // See WM_PAINT case.
  45. //
  46. // History:   
  47. //            
  48. //   Date      Author         Reason         
  49. //   9/15/91   Mark Bader     Created         
  50. //   1/7/92    Mark Bader     Took out calls to cwCenter, because         
  51. //                                an app shouldn't center dialogs on the
  52. //                                screen.
  53. //
  54. //***********************************************************************
  55.  
  56.  
  57. BOOL FAR PASCAL AboutDlgProc(HWND hWndDlg, WORD Message, WORD wParam, LONG
  58.                              lParam)
  59. {
  60.  
  61.    static HBITMAP ghAboutBmp = NULL;
  62.  
  63.    switch (Message)
  64.       {
  65.    case WM_INITDIALOG:
  66.  
  67.       // Set focus on the OK button.  Since we set focus, return FALSE
  68.       SetFocus(GetDlgItem(hWndDlg, IDOK));
  69.       ghAboutBmp = LoadBitmap(ghInst, "ABOUTBMP");
  70.       return FALSE;
  71.  
  72.    case WM_CLOSE:
  73.       /* Closing the Dialog behaves the same as Cancel               */
  74.       PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
  75.       break;
  76.  
  77.    case WM_COMMAND:
  78.       switch (wParam)
  79.          {
  80.       case IDOK:
  81.       case IDCANCEL:
  82.          EndDialog(hWndDlg, FALSE);
  83.          if (ghAboutBmp)
  84.            DeleteObject(ghAboutBmp);
  85.  
  86.          break;
  87.          }
  88.       break;    /* End of WM_COMMAND                                 */
  89.  
  90.       // Paint our bitmap in the about box in the WM_PAINT case
  91.  
  92.        case WM_PAINT:
  93.           {
  94.               HBITMAP hbm;
  95.               HDC hdc, hdcMem;
  96.               PAINTSTRUCT ps;   
  97.               RECT r1;          // Coordinates of TEXT1 control
  98.               POINT p1;         // Used to convert screen to client coords
  99.               BITMAP bm;        // For getting info about "About" bitmap
  100.         
  101.               hdc = BeginPaint(hWndDlg, &ps);
  102.  
  103.               // Place screen coords of TEXT1 in r1
  104.               GetWindowRect(GetDlgItem(hWndDlg, IDC_TEXT1), &r1);
  105.               p1.x = r1.left;
  106.               p1.y = r1.top;
  107.  
  108.               ScreenToClient(hWndDlg, &p1);
  109.  
  110.               // p1 now describes the location of upper-left corner
  111.               // for the top text in the dialog.  Let's use this
  112.               // to make sure we don't draw our bitmap over the text
  113.  
  114.               r1.left = 12;
  115.               r1.top = p1.y;
  116.               r1.right = p1.x - 25;
  117.               r1.bottom = r1.top + (r1.right - r1.left); // Make it square
  118.  
  119.               if (hdcMem = CreateCompatibleDC(hdc)) {
  120.                   GetObject(ghAboutBmp, sizeof(BITMAP), (VOID FAR *)&bm);
  121.                   hbm = SelectObject(hdcMem, ghAboutBmp);
  122.                   StretchBlt(hdc, r1.left, r1.top,
  123.                              r1.right, r1.bottom,
  124.                              hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
  125.                   SelectObject(hdcMem, hbm);
  126.                   DeleteDC(hdcMem);
  127.               }
  128.               EndPaint(hWndDlg, &ps);
  129.               break;
  130.            }
  131.     
  132.    default:
  133.       return FALSE;
  134.       }
  135.    return TRUE;
  136. } /* End of DIALOGSMsgProc                                      */
  137.  
  138.  
  139. //***********************************************************************
  140. //
  141. // "Print" Dialog Box Window Procedure
  142. //
  143. // This procedure takes care of the processing for the "Print" dialog
  144. // box, which contains the printing options.
  145. //
  146. // This Dialog Box Procedure is called using DialogBoxParam.  This
  147. // allows us to pass a parameter into the dialog box procedure -- the
  148. // parameter that gets passed in here is a LPSTR to a structure holding
  149. // all the options that the user specified in this dialog box.  This
  150. // allows passing the options back to the main program WITHOUT using
  151. // global variables.
  152. //
  153. // History:   Date      Author      Reason
  154. //            12/20/91  Mark Bader  Created from old "OptionsDlgProc" code
  155. //                                  from Wincap 1.0
  156. //
  157. //***********************************************************************
  158.  
  159.  
  160. BOOL FAR PASCAL PrintDlgProc(HWND hWndDlg, WORD Message, WORD wParam, LONG
  161.                                lParam) {
  162.  
  163. static LPOPTIONSTRUCT lpOS;
  164.  
  165.    switch (Message)
  166.       {
  167.    case WM_INITDIALOG:
  168.    {
  169.  
  170.       // Because DialogBoxParam() was used to invoke this dialog box,
  171.       // lParam contains a pointer to the OPTIONSTRUCT.
  172.       // Place user input in this structure before returning.
  173.  
  174.       lpOS = (LPOPTIONSTRUCT)lParam;
  175.  
  176.       // Check the default button -- "BEST FIT"
  177.  
  178.       CheckRadioButton(hWndDlg, IDC_BESTFIT, IDC_STRETCHTOPAGE, IDC_BESTFIT);
  179.  
  180.       // Gray out the stuff under "SCALE"
  181.  
  182.       EnableWindow(GetDlgItem(hWndDlg, IDC_XAXIS), FALSE);
  183.       EnableWindow(GetDlgItem(hWndDlg, IDC_YAXIS), FALSE);
  184.       EnableWindow(GetDlgItem(hWndDlg, IDC_XTEXT), FALSE);
  185.       EnableWindow(GetDlgItem(hWndDlg, IDC_YTEXT), FALSE);
  186.  
  187.    }
  188.       break; /* End of WM_INITDIALOG                                 */
  189.  
  190.    case WM_CLOSE:
  191.       /* Closing the Dialog should behave the same as Cancel          */
  192.       PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
  193.       break;
  194.  
  195.    case WM_COMMAND:
  196.       switch (wParam)
  197.          {
  198.  
  199.       case IDC_BESTFIT:
  200.       case IDC_STRETCHTOPAGE:
  201.       case IDC_SCALE:
  202.          // Check the correct button
  203.          CheckRadioButton(hWndDlg, IDC_BESTFIT, IDC_SCALE, wParam);
  204.  
  205.          // And enable or disable the options under "Scale",
  206.          // depending on whether or not the IDC_SCALE button is checked
  207.  
  208.          EnableWindow(GetDlgItem(hWndDlg, IDC_XAXIS), (BOOL)(wParam ==
  209.                       IDC_SCALE));
  210.          EnableWindow(GetDlgItem(hWndDlg, IDC_YAXIS), (BOOL)(wParam ==
  211.                       IDC_SCALE));
  212.          EnableWindow(GetDlgItem(hWndDlg, IDC_XTEXT), (BOOL)(wParam ==
  213.                       IDC_SCALE));
  214.          EnableWindow(GetDlgItem(hWndDlg, IDC_YTEXT), (BOOL)(wParam ==
  215.                       IDC_SCALE));
  216.          break;
  217.  
  218.       case IDOK:  /* button "OK" */
  219.       {
  220.          char szTmp[100];
  221.  
  222.          // Save the user's selection into the OPTIONSTRUCT
  223.  
  224.          if (!lpOS)
  225.          {
  226.             EndDialog(hWndDlg, FALSE);
  227.             break;
  228.          }
  229.  
  230.          if (IsDlgButtonChecked(hWndDlg, IDC_BESTFIT))
  231.             lpOS->iOption = IDC_BESTFIT;
  232.          if (IsDlgButtonChecked(hWndDlg, IDC_STRETCHTOPAGE))
  233.             lpOS->iOption = IDC_STRETCHTOPAGE;
  234.          if (IsDlgButtonChecked(hWndDlg, IDC_SCALE))
  235.             lpOS->iOption = IDC_SCALE;
  236.  
  237.          if (GetDlgItemText(hWndDlg, IDC_XAXIS, (LPSTR)szTmp, 100))
  238.             lpOS->iXScale = atoi(szTmp);
  239.          if (GetDlgItemText(hWndDlg, IDC_YAXIS, (LPSTR)szTmp, 100))
  240.             lpOS->iYScale = atoi(szTmp);
  241.  
  242.          EndDialog(hWndDlg, TRUE);
  243.       }
  244.          break;
  245.  
  246.       case IDCANCEL:
  247.       /* Ignore data values entered into the controls        */
  248.       /* and dismiss the dialog window returning FALSE       */
  249.          EndDialog(hWndDlg, FALSE);
  250.          break;
  251.  
  252.          }
  253.       break;    /* End of WM_COMMAND                                 */
  254.  
  255.    default:
  256.       return FALSE;
  257.       }
  258.    return TRUE;
  259. }
  260.  
  261.  
  262.  
  263.  
  264. //***********************************************************************
  265. //
  266. // "Saving file to..." Dialog Box Window Procedure
  267. //
  268. // This is a modeless dialog box which is called when we save the bitmap
  269. // to a file (so the user dosen't think his machine has hung).
  270. //
  271. // History:   Date      Author      Reason
  272. //            9/15/91   Mark Bader     Created
  273. //
  274. //***********************************************************************
  275.  
  276.  
  277. BOOL FAR PASCAL SavingDlgProc(HWND hDlg, WORD message, WORD wParam, LONG
  278.                               lParam)
  279. {
  280.    switch (message)
  281.       {
  282.    case WM_SETFOCUS:
  283.       MessageBeep(0);
  284.       break;
  285.  
  286.    case WM_INITDIALOG:
  287.       // Set the text of the filename in the dialog box.  This dialog
  288.       // should be called with DialogBoxParam, and the parameter should
  289.       // be a pointer to the filename.  It shows up as the lParam here.
  290.  
  291.       SetDlgItemText(hDlg, IDC_FILETEXT, (LPSTR)lParam);
  292.       return TRUE;
  293.       break;
  294.  
  295.    case WM_DESTROY:
  296.       return TRUE;
  297.       break;
  298.  
  299.    default:
  300.       return FALSE;
  301.       }
  302. }
  303.  
  304.